Godot: Stretch Mode
Godot 4.0からは、2D の設定が canvas_items に命名変更されている。 Mode は 3種類ある
https://gyazo.com/6df86f4ab4cb2a39ade3cf00e85b3b9b
Disabled
ストレッチしない。画面サイズが変わっても描画範囲などは何も変わらない
後述する Stretch Aspect 設定 も効果しない
2d
このモードでは、プロジェクト設定の幅と高さで指定された基本サイズが、画面全体を覆うように引き伸ばされます(Stretch Aspectの設定を考慮します)。これは、すべてがターゲット解像度で直接レンダリングされることを意味します。3Dは影響を受けませんが、2Dの場合、スプライトピクセルとスクリーンピクセルの間に1対1の対応がなくなるため、スケーリングアーチファクトが発生する可能性があります。
後述する Stretch Aspect 設定 を考慮して、拡縮された画面サイズに合わせて引き伸ばされる。
ピクセルアートの場合はピクセルがぼやけたりいびつになるため、これを選ばないほうがいい(2Dという設定なので誤解しがち)
Viewport
ビューポートのスケーリングは、ルート Viewport のサイズがプロジェクト設定の Display セクションで指定されたベースサイズに正確に設定されることを意味します。シーンは最初にこのビューポートにレンダリングされます。最後に、このビューポートは画面に収まるように拡大縮小されます(Stretch Aspect 設定を考慮に入れて)。
まずプロジェクトで指定した画面サイズでViewport が描画されてから、Stretch Aspect 設定 を考慮して、拡縮された画面サイズに合わせて引き伸ばされる。
この設定の場合はピクセルアートは拡縮に合わせてスプライトピクセルとスクリーンピクセルの対比を維持するので、ぼやけたりしない。
Stretch Aspect 設定
5種類の設定がある
ゲームの特性に応じて選択する
ignore
アスペクト比を無視する
ドット絵ゲームの場合はいびつになるので、これは選ばない
keep
画面をストレッチするときにアスペクト比を維持します。つまり、ビューポートは画面の解像度に関係なく元のサイズを保持し、画面の上部/下部(「レターボックス化」)または側面(「ピラーボックス化」)に黒いバーが追加されます。
これは、ターゲットデバイスのアスペクト比を事前に知っている場合、または異なるアスペクト比を処理したくない場合に適したオプションです。
これが安定の選択。
keep_width
画面をストレッチするときにアスペクト比を維持します。画面が基本サイズよりも広い場合、黒いバーが左右に追加されます(ピラーボックス化)。ただし、画面が基本解像度よりも高い場合、ビューポートは垂直方向に拡大されます(そして、より多くのコンテンツが下部に表示されます)。これを「垂直方向に拡張」と考えることもできます。
これは通常、スケーリングするGUIまたはHUDを作成するのに最適なオプションです。そのため、一部のコントロールを下部に固定できます(サイズとアンカー)。
横に画面サイズを拡縮しても、横の見える範囲は変わらないが、垂直方向は見える範囲が変わる。
縦スクロールゲームでこの設定にすると、画面サイズによって見える範囲が変わってゲーム性が変わってしまうので注意。
keep_height
画面を伸ばすときにアスペクト比を保ちます。画面が基本サイズよりも高い場合、黒いバーが上部と下部に追加されます(レターボックス化)。ただし、画面が基本解像度よりも広い場合、ビューポートは水平方向に拡大されます(さらに多くのコンテンツが右側に表示されます)。これを「水平方向に拡張」と考えることもできます。
これは通常、水平にスクロールする2Dゲーム(ランナーやプラットフォーマーなど)に最適なオプションです。
水平にスクロールするゲームで最適だが、見える範囲が変わるので画面サイズによっては開発者が意図しない見え方になるのが注意
expand
画面をストレッチするときはアスペクト比を維持しますが、ベースの幅も高さも維持しません。画面の縦横比に応じて、ビューポートは水平方向(画面が基本サイズよりも広い場合)または垂直方向(画面が元のサイズよりも高い場合)に大きくなります。
keep_height と keep_width の両拡張対応された版、keep の逆といってもいい
Stretch Shrink(ストレッチの収縮)の設定
まだ用途が分かってないkidooom.icon
基本はデフォルト値の1で良いっぽいが
If Stretch Mode is set to something other than Disabled, the size of the root viewport is scaled down by the Shrink factor, and pixels in the output are scaled up by the same amount. This is rarely useful for 2D games, but can be used to increase performance in 3D games by rendering them at a lower resolution.
2Dゲームではほぼ役に立たないが、3Dゲームで低解像度におけるレンダリングパフォーマンスを上げる目的で使えそうとのこと
公式のゲーム種類別おすすめ設定
自分がターゲットとしている、Desktop game の pixel_art のおすすめ設定は以下 Set the base window size to the viewport size you intend to use. Most pixel art games use viewport sizes between 256×224 and 640×480. Higher viewport sizes will require using higher resolution artwork, unless you intend to show more of the game world at a given time.
ピクセルアートゲームであれば、256x224 ~ 640x480 の間になることが多い
Set the stretch mode to viewport.
stretch mode は viewport にする
Set the stretch aspect to keep to enforce a single aspect ratio (with black bars). As an alternative, you can set the stretch aspect to expand to support multiple aspect ratios.
keep か expand など自分のゲームに適したのにする
大体はkeepになると思う